# 1
## gorose 的动力
由于写php, 用惯了 Laravel 的 Eloquent, 就想着用其他语言, 也有如此舒适的orm可以使用. eloquent 是受 rails 启发, 具备了简单优雅, 易上手的特点.
在python中, 有一个eloquent like的 orm 叫 orator, 我写脚本都是用这个, 用 Flask 框架, 也是用的这个 orm.
so, 在 go 语言中, 我也想用.
然而, 至今位发现有一个这么相似的, 所以, 我就像写一个, 顺便练练手, 以及在写的过程中, 会学到很多知识
## 用法畅想
```
DB.Table("user").Fields("id, name", "subject as sj").Where().Order().Limit().Offset().Get()
```
是不是看上去很`Eloquent`, 没错, 就是要像, 这样才有感觉, 让 phper 转 有回家的感觉
话入正题, 下面是见证奇迹的时刻
## 引入系统包 `database/sql`
```
import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)
```
## 构建 `Database` 模型
```
type Database struct {
	Table_     string
	Fields_    string
	Where_     map[string]interface{}
	Order_     string
	Limit_     int
	Offset_    int
	Page_      int
	bindParams []interface{}
}
```
这里以下划线结尾, 主要是为了避免跟`methods`中的方法名冲突, 因为我们外边调用到的是`methods`中的方法名, 所以, 这里命名为任何形式都可以, 只要保证是外部可访问就好
## 对应的 `interface`
```
type Databaser interface {
	Table()
	Fields()
	Where()
	Order()
	Limit()
	Offset()
	Page()
	First()
	Get()
	Query()
	Execute()
	Data()
	Insert()
	Update()
	Delete()
	Sum()
	Count()
	Avg()
	Max()
	Min()
	Distinct()
}
```
## 下面构建对应的 `methods`
### 1. Table()
这个没什么说的, string类型, 接收一个值
```
func (this *Database) Table(Table_ string) *Database {
	this.Table_ = Table_
	return this
}
```